from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    chrome = p.chromium.launch(headless=False)
    page = chrome.new_page()
    try:
        page.goto("https://yoyodadada.lanzouw.com/u/yoyodadada")  # 加载url
        page.title()  # 返回标签页对象标题
        locator = page.locator("css或xpath")  # 定位单个元素并返回 locator对象，支持链式调用，如果未定位到会返回一个空的locator对象
        locator.count()  # 返回匹配的个数
        locator.all()  # 返回一组Locator对象，List存储
        locator.last  # 返回最后一个locator对象
        locator.first  # 返回第一个locator对象
        locator.nth(0)  # 返回第几个locator对象，下标从0开始
        # 获取一组locator对象，获取元素及其所有子孙元素的文本内容，包括隐藏元素。返回的文本是一个字符串，包含元素内所有的文本。
        # 不带all则不是一个列表
        locator.all_text_contents()
        # 获取一组locator对象，获取元素及其子孙元素的可见文本内容，不包括被 CSS 样式隐藏的元素。返回的文本是一个字符串，只包含实际在页面上可见的文本。
        # 不带all则不是一个列表
        locator.all_inner_texts()
        """
        当定位器指定的元素满足 state 选项时返回。
如果目标元素已满足条件，则该方法将立即返回。否则，最多等待超 时 毫秒，直到满足条件，默认30秒，以毫秒为单位
        """
        locator.wait_for()
        selector = page.query_selector("css或xpath")  # 定位到单个元素并返回  ElementHandle对象，如未定位到则None
        selector.check()  # 点击元素
        selector.fill('填写内容')  # 填写的内容
        selector.get_attribute("获取元素的属性值")  # 获取元素的属性值
        page.query_selector_all("css或xpath")  # 定位到一组ElementHandle元素并返回，如未定位到则返回长度0的list
        page.wait_for_selector("css或xpath")  # 等待元素出现

    finally:
        input("回车关闭")
        page.close()
        chrome.close()
